package com.slwish.common.base;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

import com.slwish.common.R;
import com.slwish.common.config.PagerConfig;
import com.slwish.common.interf.PlaceHolderView;
import com.slwish.common.utils.StatusBarUtils;

import org.greenrobot.eventbus.EventBus;

import java.util.List;

import butterknife.ButterKnife;
import butterknife.Unbinder;


/**
 * @author Rocky
 */

public abstract class BaseActivity extends AppCompatActivity {

    protected PlaceHolderView mPlaceHolderView;
    private Unbinder bind;
    protected PagerConfig mPagerCofig;
    protected Context mContext;

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 在界面未初始化之前调用的初始化窗口
        initWidows();
        mContext = this;
        if (initArgs(getIntent().getExtras())) {
            // 得到界面Id并设置到Activity界面中
            int layId = getLayoutId();
            setContentView(layId);
            mPagerCofig = new PagerConfig();
            initBefore();
            initWidget();
            initData();
            initEvent();
        } else {
            finish();
        }
        //注册广播
        if (isEventBus() && !EventBus.getDefault().isRegistered(this))
            EventBus.getDefault().register(this);
        //设置StatusBar
        if (isShowStatusBar())
            // 设置透明状态栏
            StatusBarUtils.setColor(this, getResources().getColor(showStatusBarColor()), 0);
        //toolbar处理
    }

    protected boolean isEventBus() {
        return false;

    }

    /**
     * 初始化控件通用方法
     *
     * @param id  控件id
     * @param <T> 泛型
     * @return 当前控件
     */
    protected <T extends View> T getView(int id) {
        return (T) findViewById(id);
    }

    /**
     * 初始化控件通用方法
     *
     * @param view 视图View
     * @param id   控件id
     * @param <T>  泛型
     * @return 当前控件
     */
    protected <T extends View> T getView(View view, int id) {
        return (T) view.findViewById(id);
    }

    /**
     * 初始化控件调用之前
     */
    protected void initBefore() {

    }

    /**
     * 初始化窗口
     */
    protected void initWidows() {

    }

    /**
     * 是否显示StatusBar
     *
     * @return
     */
    protected boolean isShowStatusBar() {
        return true;
    }

    /**
     * 设置StatusBar颜色
     *
     * @return
     */
    protected int showStatusBarColor() {
        return R.color.statusbar_gray;
    }

    /**
     * 初始化相关参数
     *
     * @param bundle 参数Bundle
     * @return 如果参数正确返回True，错误返回False
     */
    protected boolean initArgs(Bundle bundle) {
        return true;
    }

    /**
     * 得到当前界面的资源文件Id
     *
     * @return 资源文件Id
     */
    protected abstract int getLayoutId();

    /**
     * 初始化控件
     */
    protected void initWidget() {
        bind = ButterKnife.bind(this);
    }

    /**
     * 初始化数据
     */
    protected void initData() {

    }

    /**
     * 初始化事件
     */
    protected void initEvent() {
    }

    protected void showToast(String message) {
        CommonApplication.showToast(message);
    }

    protected void showToast(int mesId) {
        CommonApplication.showToast(mesId);
    }

    @Override
    public boolean onSupportNavigateUp() {
        // 当点击界面导航返回时，Finish当前界面
        finish();
        return super.onSupportNavigateUp();
    }

    @Override
    public void onBackPressed() {
        // 得到当前Activity下的所有Fragment
        @SuppressLint("RestrictedApi")
        List<Fragment> fragments = getSupportFragmentManager().getFragments();
        // 判断是否为空
        if (fragments != null && fragments.size() > 0) {
            for (Fragment fragment : fragments) {
                // 判断是否为我们能够处理的Fragment类型
                if (fragment instanceof BaseFragment) {
                    // 判断是否拦截了返回按钮
                    if (((BaseFragment) fragment).onBackPressed()) {
                        // 如果有直接Return
                        return;
                    }
                }
            }
        }

        super.onBackPressed();
        finish();
    }

    /**
     * 设置占位布局
     *
     * @param placeHolderView 继承了占位布局规范的View
     */
    public void setPlaceHolderView(PlaceHolderView placeHolderView) {
        this.mPlaceHolderView = placeHolderView;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        bind.unbind();
        if (isEventBus() && EventBus.getDefault().isRegistered(this))
            EventBus.getDefault().unregister(this);
    }

//    @Override
//    public void onConfigurationChanged(Configuration newConfig) {
//        if (newConfig.fontScale != 1)//非默认值
//            getResources();
//        super.onConfigurationChanged(newConfig);
//    }
//
//    @Override
//    public Resources getResources() {
//        Resources res = super.getResources();
//        if (res.getConfiguration().fontScale != 1) {//非默认值
//            Configuration newConfig = new Configuration();
//            newConfig.setToDefaults();//设置默认
//            res.updateConfiguration(newConfig, res.getDisplayMetrics());
//        }
//        return res;
//    }
}
